package com.xuecheng.content.service;

import com.xuecheng.content.model.dto.BindTeachplanMediaDto;
import com.xuecheng.content.model.dto.MoveTeachPlanDto;
import com.xuecheng.content.model.dto.SaveTeachplanDto;
import com.xuecheng.content.model.dto.TeachplanDto;

import java.util.List;

/**
 * @author Mr.M
 * @version 1.0
 * @description 课程计划管理相关接口
 * @date 2023/2/14 12:10
 */
public interface TeachplanService {

    /**
     * 根据课程ID查找教学计划树
     *
     * @param courseId 课程ID，用于标识特定课程
     * @return 返回一个包含教学计划节点的列表，这些节点共同构成教学计划树
     * <p>
     * 此方法的目的是提供一个接口，通过课程ID获取该课程的教学计划树结构
     * 教学计划树是以特定格式组织的教学计划信息，便于展示课程内容的层次结构
     */
    public List<TeachplanDto> findTeachplanTree(Long courseId);


    /**
     * 保存教学计划
     * 此方法通过接收一个SaveTeachplanDto对象作为参数，来保存或更新教学计划的信息
     * 主要用于在系统中创建或修改教学计划条目，以维护教学活动的组织和管理
     *
     * @param saveTeachplanDto 包含教学计划相关信息的数据传输对象
     *                         用于将教学计划的数据从客户端传递到服务器，并保存或更新数据库中的教学计划记录
     */
    public void saveTeachplan(SaveTeachplanDto saveTeachplanDto);


    /**
     * 删除教学计划
     * <p>
     * 此方法用于根据给定的ID删除教学计划它假定调用者已经进行了必要的检查，
     * 以确保该教学计划可以被删除
     *
     * @param id 教学计划的唯一标识符如果找不到对应ID的教学计划，
     *           方法的行为将依赖于底层数据存储的实现
     */
    public void deleteTeachplan(Long id);


    public void moveTeachplan(String moveType, Long id, MoveTeachPlanDto moveTeachPlanDto);


    /**
     * 绑定媒资与课程计划
     *
     * @param bindTeachplanMediaDto
     */
    public void associationMedia(BindTeachplanMediaDto bindTeachplanMediaDto);


}
